<?php

namespace nabu\libs\messages;

defined('NABU') || exit;

// Administra mensajes sobre advertencias, avisos y errores en las vistas.
class messages {
  public function __construct() {
    if (empty($_SESSION['messages']))
      $_SESSION['messages'] = array();
  }

  // Agrega mensajes personalizados sobre advertencias y avisos;
  // son mostrados posteriormente en las vistas.
  public function add_message(string $message) {
    array_push($_SESSION['messages'], $message);
  }

  // Retorna una lista de mensajes sobre advertencias y avisos;
  // si no hay mensajes retorna una lista vacía.
  public function messages() {
    $messages = array();

    if (!empty($_SESSION['messages']) && is_array($_SESSION['messages'])) {
      $messages = $_SESSION['messages'];

      unset($_SESSION['messages']);
    }

    return $messages;
  }

  // Redirecciona a una página web y termina la ejecución de todos los scripts PHP.
  public function redirect(string $route) {
    header('Location: ' . $route);

    exit;
  }

  // Redirecciona a una ruta si existen mensajes almacenados.
  public function message_exists(string $route) {
    if (!empty($_SESSION['messages']))
      self::redirect($route);
  }

  // Redirecciona a la ruta de errores y muestra mensajes personalizados
  // sobre la vista de errores.
  public function errors(string $message, int $code) {
    $_SESSION['errors'] = array(
      'message' => $message,
      'code'    => $code
    );

    self::redirect(NABU_ROUTES['errors']);
  }
}
